消息隊列 - Apache Kafka

陳柏仁/

2023-09-20

/
--- views
在前一篇文章中,我介紹了消息隊列的概念以及其特性與優點。今天,我們將進一步研究一個業界廣泛應用的第三方消息隊列服務 - Apache Kafka。

前言

在前一篇文章中,我介紹了消息隊列的概念以及其特性與優點。今天,我們將進一步研究一個業界廣泛應用的第三方消息隊列服務 - Apache Kafka。

Apache Kafka 的起源

Apache Kafka 最初是由 LinkedIn 團隊開發,旨在解決資料傳遞問題。在 2011 年,Kafka 成為開源專案,並隨後捐獻給 Apache 基金會。目前,Kafka 主要由 Linkedin 與 Confluent (由 Linkedin 內部工程師創立,專為 Kafka 提供企業級支援的公司) 兩家公司持續維護與開發,並被許多大型知名公司所採用,包括 Netflix, Uber, Spotify 等

Apache Kafka

Apache Kafka 是一個使用 Scala 語言開發的開源事件串流平台。它採用分散式、多分區、多副本的發布訂閱架構,主要用於收集、處理和儲存串流事件資料

Apache Kafka 的組成

Apache Kafka 主要由以下幾個組件組成:

  • 生產者 (Producer): 生產者創建訊息,並把消息發佈到主題中
  • 消費者 (Consumer): 消費者訂閱主題,獲取並處理訊息
  • 主題(Topic): 主題是一個不可變的事件日誌,用於儲存相關或相同類型的事件。生產者將事件寫入特定的主題,而消費者則從主題中讀取事件。主題可以被分成多個分區,以實現水平擴展和並行處理
  • 分區(Partition):每個分區都是一個有序、不可變的事件隊列,分區允許多個消費者並行地讀取和處理訊息。每個分區都有一個唯一的識別符(Partition ID)
  • Kafka 叢集(Kafka Cluster):Kafka 叢集是由多個 Kafka Broker 組成的集合。Kafka Broker 負責處理來自生產者和消費者的請求,並將數據寫入和讀取主題的分區。Kafka 叢集提供了高可用性和容錯能力,即使其中一個 Broker 失效,整個叢集也能繼續運行

message queue kafka

Apache Kafka 的特性與優點

Apache Kafka 具有以下特性與優點:

高吞吐量、低延遲 Apache Kafka 是專為大數據串流處理而設計的,能夠每秒處理上百萬條訊息,具有高吞吐量和低延遲的特性。

高可擴展性 由於 Apache Kafka 採用分散式架構,因此可以通過增加 Kafka broker 的數量來實現水平擴展,並可以通過增加單個 Kafka broker 的容量來實現垂直擴展。

高資料可靠性、可用性 Apache Kafka 具有多分區的副本機制,在每個分區都可以有多個副本,提供了數據的備份,以防止故障和數據丟失

資料持久性 Apache Kafka 將資料輸出為記錄檔並儲存於硬碟空間,可以將數據持久化儲存,以便後續的批量處理或數據回放

Apache Kafka 的應用場景

由於 Apache Kafka 具有高可擴展性、高吞吐量和低延遲等特性,它特別適合用於大數據領域的實時計算與傳輸。因此,許多大型軟體公司都熱衷於使用它。此外,由於 Kafka 能夠持久化保存數據,它也常被用來處理日誌資料並分析瞭解使用者行為。

以下是一些使用 Kafka 處理資料的知名公司:

  • Uber: Uber 使用 Kafka 來即時收集用戶、計程車和行程數據,用於計算和預測需求,並即時計算高峰定價。
  • Spotify、Pinterest: Spotify、Pinterest 將 Kafka 作為其日誌收集管道的一部分
  • Airbnb: Airbnb 使用 Kafka 進行事件處理及異常追蹤。

結論

Apache Kafka 是一個強大的事件串流平台,具有高吞吐、低延遲、高可擴展以及高可用性等特性,被許多大型公司所採用。然而,正如其他技術一樣,Apache Kafka 也有其缺點和挑戰。

  • 路由彈性較低: 相較於 RabbitMQ 等其他消息隊列平台,Kafka 的路由彈性較低。Kafka 只匹配確切的主題名稱,並不支援萬用字元主題選擇
  • 硬碟空間需求:因為 Kafka 的設計是將所有訊息持久化到硬碟,所以對硬碟空間的需求可能會隨著訊息的增長而急劇增加
  • 大架構與操作複雜:Kafka 的架構相對大,且操作複雜,對於初學者來說可能有一定的學習曲線。這可能導致在實施和維護 Kafka 時需要更多的時間和資源。

儘管有這些挑戰,但 Apache Kafka 的優點和廣泛的應用場景使其成為大數據領域中的重要工具。總的來說,選擇是否使用 Apache Kafka,應根據具體的業務需求和組織能力進行評估。

參考資料